<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // ————————————————————————————————————————————————————————————————
    // 什么是原型？
    // 每一个对象都有他的原型对象,他可以使用自己原型对象上的所有属性和方法
    let cat = {
        name:'喵喵'
    }
    cat.__proto__.eat = function(){
        console.log('吃鱼');
    }
    cat.eat();
    // 获取原型的方法
    // 1.是通过对象的__proto__获取
    // 2.是通过构造函数的prototype属性拿到原型链 
    // 3.是通过类的prototype属性

    // ————————————————————————————————————————————————————————————————
    // 构造函数中的this指向谁
    // 指向new创建的对象

    function Cat(name,age){
        this.name = name;
        this.age = age; 
    }

    let cat = new Cat('喵喵', 2);
    Cat.prototype.eat = function(){
        console.log('吃鱼');
    }
    cat.eat()

    // ————————————————————————————————————————————————————————————————
    // 原型对象有什么用
    let date = new Date();
    console.log(date);
    // 目标输出2021年6月29日

    Date.prototype.formate = function(){
        let year = this.getFullYear();
        let month = this.getMonth();
        let date = this.getDate()
        return `${year}年${month}月${date}日`
    }

    date.formate(date.formate())
    // ————————————————————————————————————————————————————————————————
    // ES6类的基本语法
    class Cat{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
    }
    Cat.prototype.eat = function(){
        console.log('吃鱼');
    }

    let cat= new Cat('喵喵',2);
    console.log(cat.name);
    cat.eat()

    // ————————————————————————————————————————————————————————————————
    // 实际项目开发
    class User(){
        constructor(username,password){
            this.username = username;
            this.password = password;
        }
        login(){
            console.log('登录');
        }
    }

    class Admin extends User{
        deletePerson(){
            console.log('删除一个人');
        }
    }
    let admin = new Admin();
    admin.login();
</script>
</html>